#include "detColisao.h"
#include <iomanip>
Linhas::Linhas(MODEL*md,ForcaInteracao* F)
{
    Spheres=&md->SPHList;
    Lines=&md->LINList;
    Line_set=&md->LINSList;
    precisao = md->Precision;
    Forca = F;
}

void Linhas::calcular()
{
    #pragma omp single
    {
        if (Lines != NULL)
        {
            for (LINE* l = Lines->Begin; l != NULL; l = l->Next) {
                for (SPHERE* s = Spheres->Begin; s != NULL; s = s->Next) Forca->ForcaResSL( s, l );
            }
        }
    }
    #pragma omp barrier
    #pragma omp single
    {
        //Rotacionar as linhas
        for (LINE_SET* ls = Line_set->Begin; ls != NULL; ls = ls->Next)
        {
            ls->Rotate( ls->W * precisao );
            ls->UpdateLines();
        }
    }
    //Não é necessário barreira aqui
    //O que vier depois não irá iterar nas linhas
    //e o código de rotacionar as linhas percorre apenas nas linhas
}

void ImprimeMem(const char* ca,int mem)
{
    int convKbyte=1;
    if (mem>5120)
    {
        convKbyte = 1024;
        if (mem>2000000) convKbyte=1048576;
    }
    cout << "Memória ocupada por "<< ca <<":\t\t"<< AMARELO<< setprecision(4)<<(float)mem/convKbyte <<AZUL;
    if (convKbyte==1)cout << "bytes\n";
    else if (mem>2000000)cout << "MegaBytes\n";
    else cout << "kiloBytes\n";
    cout<<BRANCO;
}
